home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 3 / Amiga Tools 3.iso / grafik / raytracing / rayshade-4.0.6.3 / libshade / setup.c < prev    next >
C/C++ Source or Header  |  1994-09-03  |  6KB  |  294 lines

  1. /*
  2.  * setup.c
  3.  *
  4.  * Copyright (C) 1989, 1991, Craig E. Kolb
  5.  * All rights reserved.
  6.  *
  7.  * This software may be freely copied, modified, and redistributed
  8.  * provided that this copyright notice is preserved on all copies.
  9.  *
  10.  * You may not distribute this software, in whole or in part, as part of
  11.  * any commercial product without the express consent of the authors.
  12.  *
  13.  * There is no warranty or other guarantee of fitness of this software
  14.  * for any purpose.  It is provided solely "as is".
  15.  *
  16.  * setup.c,v 4.1 1994/08/09 08:04:52 explorer Exp
  17.  *
  18.  * setup.c,v
  19.  * Revision 4.1  1994/08/09  08:04:52  explorer
  20.  * Bump version to 4.1
  21.  *
  22.  * Revision 1.1.1.1  1994/08/08  04:52:17  explorer
  23.  * Initial import.  This is a prerelease of 4.0.6enh3, or 4.1 possibly.
  24.  *
  25.  * Revision 4.0.1.2  92/01/14  18:29:35  cek
  26.  * patch3: Added initialization of cpp option.
  27.  * 
  28.  * Revision 4.0.1.1  91/09/29  15:52:20  cek
  29.  * patch1: Added crop window initialization.
  30.  * patch1: Moved RSViewing call to appropriate location.
  31.  * 
  32.  * Revision 4.0  91/07/17  14:47:24  kolb
  33.  * Initial version.
  34.  * 
  35.  */
  36. #include "rayshade.h"
  37. #include "defaults.h"
  38. #include "libsurf/surface.h"
  39. #include "libsurf/atmosphere.h"
  40. #include "liblight/light.h"
  41. #include "liblight/infinite.h"
  42. #include "libobj/list.h"
  43. #include "options.h"
  44. #include "stats.h"
  45. #include "viewing.h"
  46. #include "picture.h"
  47.  
  48. #ifdef MULTIMAX
  49. #include <parallel.h>
  50. #define SHARED_BYTES    23    /* 2^23 bytes of shared memory */
  51. #endif
  52.  
  53. extern GeomList *Defstack;
  54.  
  55. static void SetupWorld();
  56.  
  57. /*
  58.  * Set default parameters
  59.  */
  60. void
  61. RSSetup()
  62. {
  63.     extern SurfList *CurSurf;
  64.     extern Medium TopMedium;
  65.     extern void NoiseInit();
  66. #ifdef MULTIMAX
  67.     unsigned int bytes;
  68.  
  69.     /*
  70.      * Initialize shared memory stuff.
  71.      */
  72.     bytes = 1 << SHARED_BYTES;
  73.     if (share_malloc_init(bytes) == -1) {
  74.         RLerror(RL_PANIC, "Cannot share_malloc %d bytes.\n",bytes);
  75.     } else
  76.         fprintf(fstats,"Malloced %d bytes of shared memory.\n",
  77.                 bytes);
  78. #endif
  79.  
  80.     Camera.hfov = HFOV;
  81.     Camera.vfov = UNSET;
  82.     Camera.pos.x = EYEX;
  83.     Camera.pos.y = EYEY;
  84.     Camera.pos.z = EYEZ;
  85.     Camera.lookp.x = LOOKX;
  86.     Camera.lookp.y = LOOKY;
  87.     Camera.lookp.z = LOOKZ;
  88.     Camera.up.x = UPX;
  89.     Camera.up.y = UPY;
  90.     Camera.up.z = UPZ;
  91.     Camera.focaldist = UNSET;
  92.     Camera.aperture = 0.;
  93.  
  94.     Screen.xres = Screen.yres = UNSET;
  95.  
  96.     Options.cpp = TRUE;
  97.     Options.maxdepth = MAXDEPTH;
  98.     Options.report_freq = REPORTFREQ;
  99.     Options.jitter = TRUE;
  100.     Options.samples = UNSET;
  101.     Options.gaussian = GAUSSIAN;
  102.     Options.filterwidth = UNSET;
  103.     Options.contrast.r = UNSET;
  104.     Options.ambient.r = Options.ambient.g =
  105.         Options.ambient.b = 1.0;
  106.     Options.cutoff.r = UNSET;
  107.     Options.cache = TRUE;
  108.     Options.shadowtransp = TRUE;
  109.     Options.crop[LOW][X] = Options.crop[LOW][Y] = 0.;
  110.     Options.crop[HIGH][X] = Options.crop[HIGH][Y] = 1.;
  111.     Stats.fstats = stderr;
  112.     Options.pictfile = stdout;
  113. #ifdef URT
  114.     Options.alpha = TRUE;
  115.     Options.exp_output = FALSE;
  116. #endif
  117.     Options.gamma = GAMMA;
  118.     Options.eyesep = UNSET;
  119. #ifdef LINDA
  120.     Options.workers = WORKERS;
  121. #endif
  122.  
  123.     Options.zbufprint = FALSE;
  124.     Options.zbufname = NULL;
  125.  
  126.     Options.totalframes = 1;
  127.     Options.startframe = 0;
  128.     Options.starttime = 0.;
  129.     Options.framelength = 1.;
  130.     Options.shutterspeed = 0.;
  131.  
  132.     TopMedium.index = DEFAULT_INDEX;
  133.     TopMedium.statten = 1.0;
  134.     NoiseInit();            /* Initialize values for Noise() */
  135.  
  136.     /*
  137.      * Top of object definition stack points to the World object.
  138.      * The World object is always a list.
  139.      */
  140.     Defstack = GeomStackPush(GeomListCreate(), (GeomList *)NULL);
  141.     Defstack->obj->name = strsave("World");
  142.     /* Initialize surface stack */
  143.     CurSurf = SurfPush((Surface *)NULL, (SurfList *)NULL);
  144. }
  145.  
  146. /*
  147.  * cleanup()
  148.  *
  149.  * Initialize options/variables not set on command line or in input file.
  150.  * Perform sanity checks on widow dimension, maxdepth, etc.
  151.  */
  152. void
  153. RSCleanup()
  154. {
  155.     extern Light *Lights;
  156.     extern void OpenStatsFile();
  157.     extern FILE *yyin;
  158.  
  159. #ifdef AMIGA
  160. /* probably need to do this unconditionally */
  161.     if (yyin){
  162.       close_yyin();
  163.     }
  164. #endif
  165.     yyin = (FILE *)NULL;    /* mark that we're done reading input */
  166.  
  167.     if (Options.samples == UNSET)
  168.         Options.samples = DEFSAMPLES;
  169.  
  170.     if (Options.filterwidth == UNSET) {
  171.         if (Options.gaussian)
  172.             Options.filterwidth = FILTERWIDTH;
  173.         else
  174.             /* Default box filter width of 1.0 */
  175.             Options.filterwidth = 1.0;
  176.     }
  177.  
  178.     Options.endframe = Options.startframe + Options.totalframes -1;
  179.  
  180.     OpenStatsFile();
  181.  
  182.     ViewingSetup();
  183.  
  184.     if (Options.cutoff.r == UNSET)
  185.         Options.cutoff.r = Options.cutoff.g =
  186.             Options.cutoff.b = DEFCUTOFF;
  187.  
  188.     /*
  189.      * Set contrast.
  190.      */
  191.     if (Options.contrast.r == UNSET) {
  192.         Options.contrast.r = DEFREDCONT;
  193.         Options.contrast.g = DEFGREENCONT;
  194.         Options.contrast.b = DEFBLUECONT;
  195.     }
  196.     /*
  197.      * Image gamma is inverse of display gamma.
  198.      */
  199.     if (fabs(Options.gamma) > EPSILON)
  200.         Options.gamma = 1. / Options.gamma;
  201.     else
  202.         Options.gamma = FAR_AWAY;
  203.  
  204.     if (Options.maxdepth < 0)
  205.         Options.maxdepth = 0;
  206.  
  207.  
  208.     LightSetup();
  209.     if (Options.zbufprint)
  210.         ZbufSetup();
  211. }
  212.  
  213. void
  214. RSStartFrame(frame)
  215. int frame;
  216. {
  217.     /*
  218.      * Set the frame start time
  219.      */
  220.     Options.framenum = frame;
  221.     Options.framestart = Options.starttime +
  222.             Options.framenum*Options.framelength;
  223.     SamplingSetTime(Options.framestart, Options.shutterspeed,
  224.             Options.framenum);
  225.     /*
  226.      * Set up viewing parameters.
  227.      * Can't animate camera yet; when possible, this will
  228.      * need to be much smarter.
  229.      * RSViewing();
  230.      */
  231.  
  232.     /*
  233.      * Initialize world
  234.      */
  235.     WorldSetup();
  236. }
  237.  
  238. /*
  239.  * Initialize non-time-varying goodies.
  240.  */
  241. void
  242. RSInitialize(argc, argv)
  243. int argc;
  244. char **argv;
  245. {
  246.     /*
  247.       * Initialize variables, etc.
  248.      */
  249.     RSSetup();
  250.     /*
  251.      * Parse options from command line.
  252.      */
  253.     RSOptionsSet(argc, argv);
  254.     /*
  255.      * Process input file.
  256.      */
  257.     if (Options.verbose) {
  258.         VersionPrint();
  259.         fprintf(Stats.fstats,"Reading input file...\n");
  260.         (void)fflush(Stats.fstats);
  261.     }
  262.     RSReadInputFile();
  263.     /*
  264.      * Set variables that weren't set on command line
  265.      * or in input file.
  266.      */
  267.     RSCleanup();
  268.     /*
  269.      * Set sampling options.
  270.      */
  271.     SamplingSetOptions(Options.samples, Options.gaussian,
  272.                Options.filterwidth);
  273.     /*
  274.      * Camera is currently static; initialize it here.
  275.      */
  276.     RSViewing();
  277. }
  278. #ifdef AMIGA
  279. close_yyin()
  280. {
  281.   extern FILE *yyin;
  282.  
  283.   if (!yyin) return;
  284.  
  285. #if defined(CPPSTDIN) && defined(POPEN)
  286.   if (Options.cpp)
  287.     pclose(yyin);
  288.   else
  289. #endif
  290.     if (yyin != stdin)
  291.       fclose(yyin);
  292. }
  293. #endif
  294.